package seg2500.messagerie;

import java.io.*;
import java.util.*;
import javax.security.auth.login.*;
import javax.security.auth.*;
import java.security.*;
import javax.security.auth.callback.*;
import com.lloseng.auth.*;

/**
 * La classe <code> StartClient </code> permet de 
 * demarrer le client de la messagerie. Elle ne contient que
 * une methode <code> main </code>.<p>
 *
 * @author Dr Robert Lagani&egrave;re
 * @version September 2003
 */
public class StartClient {

  public static void demarre(Principal utilisateur) {

    try
    {
      /* Initialise le client. */
      Session.instance().utilisateur(utilisateur);
	  Session.instance().openConnection();
  
      /*--- Module: nom - Equipe: Prof ---*/

      seg2500.messagerie.texte.TexteClient texte= 
        new seg2500.messagerie.texte.TexteClient(
		  new seg2500.messagerie.texte.TexteFrame()); 

 	  // Creer votre module ici

	  // Inscrire votre module comme observateur du client
      // Session.instance().addObserver(votre_module);

		Session.instance().addObserver(texte);

	  // envoie de l'objet Utilisateur
		Session.instance().sendToServer(utilisateur);

      /*----------------------------------------------*/


    } 
	catch(Exception ex) 
	{
      System.out.println("Erreur! " + ex);
    }
  }

  public static void main(String[] args) {

    // Obtain a LoginContext
    LoginContext lc = null;

    try {

        lc = new LoginContext("Project", new AWTCallbackHandler());
        
    } catch (Exception le) {
    
        System.err.println("Cannot create LoginContext. " + le.getMessage());
        System.exit(-1);
        
    } 

    // the user has 3 attempts to authenticate successfully
    int i;
    for (i = 0; i < 3; i++) {
    
        try {

          lc.login();

          // if we return with no exception, authentication succeeded
          break;

        } catch (LoginException le) {

          System.err.println(le.getMessage().toString());
          try {
              Thread.currentThread().sleep(3000);
          } catch (Exception e) {
              // ignore
          } 
    
        }
    }

    // did they fail three times?
    if (i == 3) {
        System.out.println("Sorry");
        System.exit(-1);
    }

    System.out.println("Authentication succeeded!");

    // gets all principals
    Principal p=null;
    Iterator it= lc.getSubject().getPrincipals().iterator();
    while (it.hasNext()) {
    
      System.out.println("Welcome " + (p=(Principal)it.next()));
    }

    demarre(p);
  }
}
